﻿namespace ReadPLCSimple
{
    internal class Program
    {
        static void Main(string[] args)
        {
            ThreadPool.SetMinThreads(100, 100); // 设置线程池数量，数值越大读取PLC速度越快

            Task.Factory.StartNew(() =>
            {
                while (true)
                {
                    // 批量读取，第1个参数是一个集合，第2个参数是最大并行度
                    Parallel.ForEach(Enumerable.Range(0, 500), new ParallelOptions() { MaxDegreeOfParallelism = 500 }, (i, c) =>
                    {
                        ReadPLC(i);
                    });

                    Thread.Sleep(200); // 每200毫秒批量读取一次
                }
            }, TaskCreationOptions.LongRunning);

            Console.WriteLine("执行到Main函数结尾");
            Console.ReadLine();
        }

        static void ReadPLC(int plcIndex)
        {
            // todo: 读取PLC
            Thread.Sleep(50); // 模拟同步方式读取PCL耗时
            Console.WriteLine($"读取PLC完成，plcIndex={plcIndex}");
        }
    }
}
